import storage from 'good-storage'

// 定义保存历史记录的key与保存的最大长度
const SEARCH_KEY = '__search__';
const SEARCH_MAX_LEN = 15;

// 播放历史记录 对播放列表进行存储
const PLAY_KEY = '__play__';
const PLAY_MAX_LEN = 200; // 对多记录200首

// 收藏
const FAVORITE_KEY = '__favorite__';
const FAVORITE_MAX_LEN = 200;

// 保存历史记录的处理函数
// arr数组，val值，compare比较函数，maxLen运行保存的数组最大长度
function insertArray(arr, val, compare, maxLen) {
  // 查询在数组中的位置
  const index = arr.findIndex(compare);
  // 如果存在并且在数组中的第一位，什么都不做
  if (index === 0) {
    return
  }
  // 如果存在但是不在数组中第一位，就删除，在数据前面重新添加
  if (index > 0) {
    arr.splice(index, 1)
  }
  arr.unshift(val); // 在数组前面添加
  // 如果长度超过定义的最大长度，就删除数组的最后一项。
  if (maxLen && arr.length > maxLen) {
    arr.pop(); // 删除数组的最后一项
  }
}

function deleteFromArray(arr, compare) {
  const index = arr.findIndex(compare);
  if (index > -1) {
    arr.splice(index, 1)
  }
}

export function saveSearch(query) {
  let searches = storage.get(SEARCH_KEY, []);
  insertArray(searches, query, (item) => {
    return item === query
  }, SEARCH_MAX_LEN);
  storage.set(SEARCH_KEY, searches);
  return searches
}

// 删除搜索记录
export function deleteSearch(query) {
  let searches = storage.get(SEARCH_KEY, []);
  deleteFromArray(searches, (item) => {
    return item === query
  });
  storage.set(SEARCH_KEY, searches);
  return searches
}

// 清空历史记录
export function clearSearch() {
  storage.remove(SEARCH_KEY);
  return []
}

export function loadSearch() {
  return storage.get(SEARCH_KEY, [])
}

// 保存历史播放列表
export function savePlay(song) {
  let songs = storage.get(PLAY_KEY, []);
  insertArray(songs, song, (item) => {
    return song.id === item.id
  }, PLAY_MAX_LEN);
  storage.set(PLAY_KEY, songs);
  return songs
}

// 读取播放历史记录列表
export function loadPlay() {
  return storage.get(PLAY_KEY, [])
}

// 收藏歌曲
export function saveFavorite(song) {
  let songs = storage.get(FAVORITE_KEY, []);
  // 把当前的歌曲插入到songs中
  insertArray(songs, song, (item) => {
    return song.id === item.id
  }, FAVORITE_MAX_LEN);
  storage.set(FAVORITE_KEY, songs);
  return songs;
}
// 取消收藏歌曲
export function deleteFavorite(song) {
  let songs = storage.get(FAVORITE_KEY, []);
  deleteFromArray(songs, (item) => {
    return item.id === song.id
  });
  storage.set(FAVORITE_KEY, songs);
  return songs
};

// 保存收藏的歌曲(页面初始化时的获取到的收藏列表)
export function loadFavorite() {
  return storage.get(FAVORITE_KEY, [])
}

